【问题描述】
示例2-5中需要新建一个Excel文件,然后将导入的数据写入到该文件中的工作表中。能不能不新建Excel文件,直接在当前Excel文件中新建工作表,然后将导入的数据输出到这个新建的工作表呢?答案是可以的。可以用xlwings包或者OpenPyXL包来实现。[大谦Excel,dqexcel点com]
【示例2-6】
使用示例2-5的数据。导入文件的前6行数据,然后用xlwings打开示例文件,新建一个工作表,将导入的数据添加到新建的工作表中。
- 编写下面的代码:
import pandas as pd
import xlwings as xw
# 文件路径
file_path = r'D:/Samples/ch02/04 数据输出到新的工作表/产品出厂价.xlsx'
# 用pandas导入前6行数据
df = pd.read_excel(file_path, engine='openpyxl', nrows=6)
# 用xlwings打开该Excel文件
wb = xw.Book(file_path)
# 添加一个新的工作表Sheet2,写入数据并保存
sheet2 = wb.sheets.add(name="Sheet2")
sheet2.range('A1').value = df
# 退出xlwings
wb.save()
wb.close()
打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,用xlwings打开Excel文件,新建一个工作表Sheet2,将导入的数据写入到该工作表中。如图2-5所示。
图2-5 数据导出到同一工作簿中新建的工作表中
【知识点扩展】
使用xlwings包打开Excel数据文件,在工作簿中新建一个工作表,然后用xlwings包直接将DataFrame写入新工作表的指定位置。
学习更多与xlwings包有关的知识,推荐本人拙作《代替VBA,用Python轻松实现Excel编程》。
【示例2-7】
使用示例2-5的数据。导入文件的前6行数据,然后用OpenPyXL打开示例文件,新建一个工作表,将导入的数据添加到新建的工作表中。
- 编写下面的代码:
import pandas as pd
from openpyxl import load_workbook
# 导入Excel文件数据前6行,引擎为openpyxl。
df = pd.read_excel('D:/Samples/ch02/04 数据输出到新的工作表/产品出厂价.xlsx', engine='openpyxl', nrows=6)
# 获取Excel文件所在目录的完整路径
file_path = 'D:/Samples/ch02/04 数据输出到新的工作表/产品出厂价.xlsx'
# 用OpenPyXL打开该Excel文件,并添加一个新的工作表Sheet2
book = load_workbook(file_path)
writer = pd.ExcelWriter(file_path, engine='openpyxl')
writer.book = book
df.to_excel(writer, sheet_name='Sheet2')
# 保存更改并关闭Excel文件
writer.save()
writer.close()
打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,用OpenPyXL打开Excel文件,新建一个工作表Sheet2,将导入的数据写入到该工作表中。如图2-6所示。
图2-6 用OpenPyXL保存数据到新工作表
使用提示词模板还可能得到类似下面的代码:
import pandas as pd
from openpyxl import load_workbook
# 读取Excel文件中的数据
df = pd.read_excel('D:/Samples/ch02/04 数据输出到新的工作表/产品出厂价.xlsx', engine='openpyxl', usecols='A:D', nrows=6)
# 获取Excel文件所在目录的完整路径
file_path = 'D:/Samples/ch02/04 数据输出到新的工作表/产品出厂价.xlsx'
# 使用OpenPyXL打开Excel文件,并添加一个新的工作表Sheet2
wb = load_workbook(filename=file_path)
ws = wb.create_sheet('Sheet2')
# 将导入的数据用OpenPyXL写入到Sheet2工作表中
for r in dataframe_to_rows(df, index=False, header=False):
ws.append(r)
# 保存Excel文件并退出
wb.save(file_path)
wb.close()
保存该代码后运行,会报类似下面的出错信息:
NameError: name 'dataframe_to_rows' is not defined
在上面的代码中,在第3行处添加下面的代码即可:
from openpyxl.utils.dataframe import dataframe_to_rows
该代码从openpyxl.utils.dataframe子模块中导入dataframe_to_rows函数,然后就可以正常使用了。
【知识点扩展】
使用OpenPyXL包打开Excel数据文件,在工作簿中新建一个工作表,然后用OpenPyXL包将DataFrame中的数据写入新工作表。